Skip to content

docs: re-derive the drifted claims in ARCHITECTURE, README, CONTRIBUTING and TESTING - #2113

Merged
laurentiu021 merged 1 commit into
mainfrom
docs/re-derive-drifted-claims
Sep 4, 2026
Merged

docs: re-derive the drifted claims in ARCHITECTURE, README, CONTRIBUTING and TESTING#2113
laurentiu021 merged 1 commit into
mainfrom
docs/re-derive-drifted-claims

Conversation

@laurentiu021

Copy link
Copy Markdown
Owner

Closes #2108. Closes #2109.

Every number and claim below was re-derived from current source in this branch, not carried over from the issue.

ARCHITECTURE.md

Was Now Derived from
"The four Network tabs also stay eager" exactly three stay eager, and the paragraph now points at the guard that enforces it instead of restating a hand-maintained list OnlyTheJustifiedTabs_AreBuiltAtStartup's justified array
"all ~50 tab VMs" 55 lazily-registered tab VMs grep -c 'Tab<…ViewModel>'
Console "used by … and Uninstaller" "… and System Fixes" UninstallerView.xaml references the console 0 times; SystemFixesView.xaml does and was missing
"Thirteen are registered" Fourteen, and ICleanupPreScanService added to the enumeration 14 Add*<I…,…> registrations in ServiceRegistration.cs
traceroute probes "on Ping and tracert" walks the TTL itself via PingOptions(ttl, true) and TtlExpired replies tracert appears 0 times in any .cs; TracerouteService uses SendPingAsync
profile export "(theme, speed-test history)" the nine sections ProfileService.Catalog actually lists, plus the skip-if-absent rule the Catalog entries

README.md

  • collapsed groups show "a subtitle with abbreviated child labels" → "a written one-line summary of what the group covers". The generated abbreviation is gone; EverySidebarGroupSubtitle_IsWrittenCopyThatFitsTwoLines now fails that shape.
  • tray "Context menu: Show / Exit" → "Show SysManager / Volume mixer / Exit", the three MenuItem headers in TrayIconService. The page previously contradicted itself, since its own Volume Control section describes the Volume mixer shortcut.

CONTRIBUTING.md / TESTING.md

  • author-header count 688 → 704, counted now.
  • the formatting snippet checked one project directly under a sentence saying CI checks four. It now loops over all four, and I ran that exact loop: all four clean.
  • NSubstitute 6.1 → 6.2, matching the Directory.Packages.props pin of 6.2.0.

Source XML doc

NavGroup.Subtitle said "Abbreviated child labels joined with ·". It is written copy set per group at the call site; the doc now says so and names where.

CHANGELOG + the v1.76.1 release body (#2109)

The v1.76.1 entry listed "a shield for Privacy & Security" and then, sixteen lines later, explained that the admin badge is the shield because the padlock is what Privacy & Security uses. Source settles it: Group("grp-privacy", …, "", …) // Lock and <!-- Shield (EA18), not the padlock this used to draw. -->. Corrected to "a padlock" in CHANGELOG.md and in the published release body, which was copied from it.

No announcement discussion needed correcting — patch releases have not had one since #2073, and the newest announcement is for 1.76.0.

One claim left in place on purpose

README still says "Each tab shows a slim progress bar under its name when performing a long-running operation." That is false today for 11 of the 55 tab view-models, which never assign IsBusy — including Speed Test, Traceroute, Ping and Network Repair, the four slowest tabs in the app. Weakening the sentence would document a gap instead of closing it, so the fix belongs in the code and goes in its own PR. #2108 records the list.

Verification

docs: — no release, no version bump. Version consistency unchanged and re-checked (csproj 1.76.12 = newest CHANGELOG entry 1.76.12 = SECURITY 1.76.x); only the 1.76.1 entry was edited, not the newest. Build 0 errors / 0 warnings after the NavGroup.cs doc change, ArchitectureTests 89 green (plus the harness-only author-header case for the throwaway runner), dotnet format --verify-no-changes clean on all four projects.

…ING and TESTING

Ten statements described code that has since changed. Each replacement was measured
in this branch rather than carried over:

ARCHITECTURE - the four Network tabs are lazy, not eager (the guard allows exactly
three, and the paragraph now points at it instead of restating a hand-kept list);
55 lazy tab VMs, not ~50; the console list had Uninstaller, which binds none, and
was missing System Fixes, which does; fourteen interface registrations, not
thirteen, with ICleanupPreScanService added; traceroute walks the TTL itself rather
than shelling out to a tool whose name has never appeared in this codebase; the
profile export carries nine catalog sections, not the two named.

README - collapsed groups show written copy, not abbreviated child labels; the tray
menu has three items and the page contradicted itself about them.

CONTRIBUTING - 704 author headers, not 688; the formatting snippet checked one
project under a sentence saying CI checks four, and now loops over all four (run and
verified clean).

TESTING - NSubstitute 6.2, matching the pin.

NavGroup.Subtitle's XML doc still described the generated abbreviation.

The v1.76.1 CHANGELOG entry named a shield for Privacy & Security and then explained
sixteen lines later that the padlock is what that group uses. Corrected there and in
the published release body copied from it.

One README claim is deliberately untouched: the slim-progress-bar sentence is false
for 11 tab view-models that never assign IsBusy, and closing that gap is a code
change, not a wording change.

Closes #2108
Closes #2109
@laurentiu021
laurentiu021 merged commit e17f6e3 into main Sep 4, 2026
5 checks passed
@laurentiu021
laurentiu021 deleted the docs/re-derive-drifted-claims branch September 4, 2026 14:08
laurentiu021 added a commit that referenced this pull request Sep 4, 2026
NavItem forwards ViewModelBase.IsBusy to the slim progress bar under a tab's name,
which is the only sign -- while the user is on another tab -- that this one is
working. Five view-models kept their own running flag and never assigned IsBusy, so
their bar never appeared, and they are the slowest screens in the app: Speed Test
(up to a minute), Traceroute (up to thirty hops), Network Repair (three netsh resets),
About (an ~85 MB download) and DNS & Hosts.

One generated hook each, copying the idiom DeepCleanupViewModel already uses, so the
existing flag stays the single source of truth.

Scope came from a corrected measurement. Looking for On...Changed hooks reported 16
unforwarded flags, which was wrong -- several tabs assign IsBusy inline in the command
body, which is equally correct. Re-measured as "assigns IsBusy anywhere" the real
list was three, plus two more once the flag pattern covered Running/Loading suffixes.

Guarded by EveryViewModelThatTracksRunningState_ForwardsItToIsBusy, indifferent to HOW
the assignment happens so the inline tabs keep passing, with the one non-tab match
(AudioSessionRowViewModel.IsUserAdjusting, a slider drag) excluded with its reason.

This also makes the README's progress-bar sentence true, which #2113 left standing on
purpose rather than weakening it.

Co-authored-by: laurentiu021 <laurentiu021@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant